package model.comunication;

import java.util.Calendar;
import java.util.List;

import model.PersonalAdministrativo;
import model.Tipo_Empleado;
import model.dba.PersonalAdministrativoDAO;

public class IPersonalAdministrativo {
	private PersonalAdministrativoDAO personalAdministrativoDAO;
	private static IPersonalAdministrativo personalAdministrativoInterface;

	private IPersonalAdministrativo() {
		this.personalAdministrativoDAO = PersonalAdministrativoDAO.getInstance();
	}

	public static IPersonalAdministrativo getInstance() {
		if (personalAdministrativoInterface == null) {
			personalAdministrativoInterface = new IPersonalAdministrativo();
		}
		return personalAdministrativoInterface;
	}

	/**
	 * Crea el objeto
	 * 
	 * @param nombre
	 * @param apellido
	 * @param direccion
	 * @param telefono
	 * @param celular
	 * @param nacimiento
	 * @param DNI
	 * @param tipo
	 * @return
	 */
	public PersonalAdministrativo getPersonalAdministrativo(String nombre, String apellido, String direccion, String telefono, String celular, Calendar nacimiento, String DNI, Tipo_Empleado tipo, String eliminado, int idUsuario) {
		return new PersonalAdministrativo(nombre, apellido, direccion, telefono, celular, nacimiento, DNI, tipo, eliminado, idUsuario);
	}

	/**
	 * Crea el objeto
	 * 
	 * @param nombre
	 * @param apellido
	 * @param direccion
	 * @param telefono
	 * @param celular
	 * @param nacimiento
	 * @param DNI
	 * @param tipo
	 * @return
	 */
	public PersonalAdministrativo getPersonalAdministrativo(String nombre, String apellido, String direccion, String telefono, String celular, Calendar nacimiento, String DNI, Tipo_Empleado tipo) {
		return new PersonalAdministrativo(nombre, apellido, direccion, telefono, celular, nacimiento, DNI, tipo);
	}

	/**
	 * Crea el objeto
	 * 
	 * @param nombre
	 * @param apellido
	 * @param direccion
	 * @param telefono
	 * @param celular
	 * @param nacimiento
	 * @param DNI
	 * @return
	 */
	public PersonalAdministrativo getPersonalAdministrativo(String nombre, String apellido, String direccion, String telefono, String celular, Calendar nacimiento, String DNI) {
		return new PersonalAdministrativo(nombre, apellido, direccion, telefono, celular, nacimiento, DNI);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param DNI
	 * @return
	 */
	public PersonalAdministrativo getPersonalAdministrativo(String DNI) {
		return this.personalAdministrativoDAO.get(DNI);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param tipo
	 * @return
	 */
	public List<PersonalAdministrativo> getPersonalAdministrativo(Tipo_Empleado tipo) {
		return this.personalAdministrativoDAO.get(tipo);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param tipo
	 * @return
	 */
	public PersonalAdministrativo find(int idUsuario) {
		return this.personalAdministrativoDAO.find(idUsuario);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param tipo
	 * @return
	 */
	public List<PersonalAdministrativo> findPersonalAdministrativo(String nombre, String apellido) {
		return this.personalAdministrativoDAO.find(nombre, apellido);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @return
	 */
	public List<PersonalAdministrativo> getAllPersonalAdministrativo() {
		return this.personalAdministrativoDAO.getAll();
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param personalAdministrativo
	 * @return
	 */
	public Integer addPersonalAdministrativo(PersonalAdministrativo personalAdministrativo) {
		return this.personalAdministrativoDAO.add(personalAdministrativo);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param personalAdministrativo
	 * @return
	 */
	public boolean updatePersonalAdministrativo(PersonalAdministrativo personalAdministrativo) {
		return this.personalAdministrativoDAO.update(personalAdministrativo);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param personalAdministrativo
	 * @return
	 */
	public boolean darBajaPersonalAdministrativo(PersonalAdministrativo personalAdministrativo) {
		return this.personalAdministrativoDAO.updateBaja(personalAdministrativo);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param personalAdministrativo
	 * @return
	 */
	public boolean deletePersonalAdministrativo(PersonalAdministrativo personalAdministrativo) {
		return this.personalAdministrativoDAO.delete(personalAdministrativo);
	}

}
